	/* Generates integer IDs at compile time by hashing strings.

    Based on:
    http://www.humus.name/index.php?page=News&ID=296

    @remarks This class exploits two language details to get optimized out of
            the compiled code. Firstly, the use of array references lets the 
            compiler know the string's existence and size. Secondly, the lack
            of the @c explicit keyword allows a string literal to be converted 
            directly to a StringId.
            
    @author Joshua Ols <crunchy.bytes.blog@gmail.com>
 */
#pragma once

namespace ECS
{


#ifdef _MSC_VER
#define DunForceInline __forceinline
#else
#define DunForceInline __attribute__((always_inline))
#endif



	namespace impl
	{

		DunForceInline unsigned int getStaticStringHash2(const char* str)
		{
			return str[0];
		} 

		DunForceInline unsigned int getStaticStringHash3(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash4(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			return uiHash;
		}

		DunForceInline unsigned int getStaticStringHash5(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			return uiHash;
		}

		DunForceInline unsigned int getStaticStringHash6(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash7(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash8(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash9(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash10(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash11(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash12(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash13(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash14(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash15(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash16(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash17(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash18(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash19(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			uiHash = (uiHash * 65599u) + str[17];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash20(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			uiHash = (uiHash * 65599u) + str[17];
			uiHash = (uiHash * 65599u) + str[18];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash21(const char* str)
		{
			unsigned int uiHash = str[0];
			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			uiHash = (uiHash * 65599u) + str[17];
			uiHash = (uiHash * 65599u) + str[18];
			uiHash = (uiHash * 65599u) + str[19];
			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash22(const char* str)
		{
			unsigned int uiHash = str[0];

			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			uiHash = (uiHash * 65599u) + str[17];
			uiHash = (uiHash * 65599u) + str[18];
			uiHash = (uiHash * 65599u) + str[19];
			uiHash = (uiHash * 65599u) + str[20];

			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash23(const char* str)
		{
			unsigned int uiHash = str[0];

			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			uiHash = (uiHash * 65599u) + str[17];
			uiHash = (uiHash * 65599u) + str[18];
			uiHash = (uiHash * 65599u) + str[19];
			uiHash = (uiHash * 65599u) + str[20];
			uiHash = (uiHash * 65599u) + str[21];

			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash24(const char* str)
		{
			unsigned int uiHash = str[0];

			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			uiHash = (uiHash * 65599u) + str[17];
			uiHash = (uiHash * 65599u) + str[18];
			uiHash = (uiHash * 65599u) + str[19];
			uiHash = (uiHash * 65599u) + str[20];
			uiHash = (uiHash * 65599u) + str[21];
			uiHash = (uiHash * 65599u) + str[22];

			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash25(const char* str)
		{
			unsigned int uiHash = str[0];

			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			uiHash = (uiHash * 65599u) + str[17];
			uiHash = (uiHash * 65599u) + str[18];
			uiHash = (uiHash * 65599u) + str[19];
			uiHash = (uiHash * 65599u) + str[20];
			uiHash = (uiHash * 65599u) + str[21];
			uiHash = (uiHash * 65599u) + str[22];
			uiHash = (uiHash * 65599u) + str[23];

			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash26(const char* str)
		{
			unsigned int uiHash = str[0];

			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			uiHash = (uiHash * 65599u) + str[17];
			uiHash = (uiHash * 65599u) + str[18];
			uiHash = (uiHash * 65599u) + str[19];
			uiHash = (uiHash * 65599u) + str[20];
			uiHash = (uiHash * 65599u) + str[21];
			uiHash = (uiHash * 65599u) + str[22];
			uiHash = (uiHash * 65599u) + str[23];
			uiHash = (uiHash * 65599u) + str[24];

			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash27(const char* str)
		{
			unsigned int uiHash = str[0];

			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			uiHash = (uiHash * 65599u) + str[17];
			uiHash = (uiHash * 65599u) + str[18];
			uiHash = (uiHash * 65599u) + str[19];
			uiHash = (uiHash * 65599u) + str[20];
			uiHash = (uiHash * 65599u) + str[21];
			uiHash = (uiHash * 65599u) + str[22];
			uiHash = (uiHash * 65599u) + str[23];
			uiHash = (uiHash * 65599u) + str[24];
			uiHash = (uiHash * 65599u) + str[25];

			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash28(const char* str)
		{
			unsigned int uiHash = str[0];

			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			uiHash = (uiHash * 65599u) + str[17];
			uiHash = (uiHash * 65599u) + str[18];
			uiHash = (uiHash * 65599u) + str[19];
			uiHash = (uiHash * 65599u) + str[20];
			uiHash = (uiHash * 65599u) + str[21];
			uiHash = (uiHash * 65599u) + str[22];
			uiHash = (uiHash * 65599u) + str[23];
			uiHash = (uiHash * 65599u) + str[24];
			uiHash = (uiHash * 65599u) + str[25];
			uiHash = (uiHash * 65599u) + str[26];

			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash29(const char* str)
		{
			unsigned int uiHash = str[0];

			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			uiHash = (uiHash * 65599u) + str[17];
			uiHash = (uiHash * 65599u) + str[18];
			uiHash = (uiHash * 65599u) + str[19];
			uiHash = (uiHash * 65599u) + str[20];
			uiHash = (uiHash * 65599u) + str[21];
			uiHash = (uiHash * 65599u) + str[22];
			uiHash = (uiHash * 65599u) + str[23];
			uiHash = (uiHash * 65599u) + str[24];
			uiHash = (uiHash * 65599u) + str[25];
			uiHash = (uiHash * 65599u) + str[26];
			uiHash = (uiHash * 65599u) + str[27];

			return uiHash;
		} 

		DunForceInline unsigned int getStaticStringHash30(const char* str)
		{
			unsigned int uiHash = str[0];

			uiHash = (uiHash * 65599u) + str[1];
			uiHash = (uiHash * 65599u) + str[2];
			uiHash = (uiHash * 65599u) + str[3];
			uiHash = (uiHash * 65599u) + str[4];
			uiHash = (uiHash * 65599u) + str[5];
			uiHash = (uiHash * 65599u) + str[6];
			uiHash = (uiHash * 65599u) + str[7];
			uiHash = (uiHash * 65599u) + str[8];
			uiHash = (uiHash * 65599u) + str[9];
			uiHash = (uiHash * 65599u) + str[10];
			uiHash = (uiHash * 65599u) + str[11];
			uiHash = (uiHash * 65599u) + str[12];
			uiHash = (uiHash * 65599u) + str[13];
			uiHash = (uiHash * 65599u) + str[14];
			uiHash = (uiHash * 65599u) + str[15];
			uiHash = (uiHash * 65599u) + str[16];
			uiHash = (uiHash * 65599u) + str[17];
			uiHash = (uiHash * 65599u) + str[18];
			uiHash = (uiHash * 65599u) + str[19];
			uiHash = (uiHash * 65599u) + str[20];
			uiHash = (uiHash * 65599u) + str[21];
			uiHash = (uiHash * 65599u) + str[22];
			uiHash = (uiHash * 65599u) + str[23];
			uiHash = (uiHash * 65599u) + str[24];
			uiHash = (uiHash * 65599u) + str[25];
			uiHash = (uiHash * 65599u) + str[26];
			uiHash = (uiHash * 65599u) + str[27];
			uiHash = (uiHash * 65599u) + str[28];

			return uiHash;
		}
	}

	DunForceInline unsigned int getStaticStringHash(const char (&str)[2])
	{
		return impl::getStaticStringHash2(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[3])
	{
		return impl::getStaticStringHash3(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[4])
	{
		return impl::getStaticStringHash4(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[5])
	{
		return impl::getStaticStringHash5(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[6])
	{
		return impl::getStaticStringHash6(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[7])
	{
		return impl::getStaticStringHash7(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[8])
	{
		return impl::getStaticStringHash8(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[9])
	{
		return impl::getStaticStringHash9(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[10])
	{
		return impl::getStaticStringHash10(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[11])
	{
		return impl::getStaticStringHash11(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[12])
	{
		return impl::getStaticStringHash12(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[13])
	{
		return impl::getStaticStringHash13(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[14])
	{
		return impl::getStaticStringHash14(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[15])
	{
		return impl::getStaticStringHash15(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[16])
	{
		return impl::getStaticStringHash16(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[17])
	{
		return impl::getStaticStringHash17(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[18])
	{
		return impl::getStaticStringHash18(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[19])
	{
		return impl::getStaticStringHash19(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[20])
	{
		return impl::getStaticStringHash20(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[21])
	{
		return impl::getStaticStringHash21(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[22])
	{
		return impl::getStaticStringHash22(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[23])
	{
		return impl::getStaticStringHash23(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[24])
	{
		return impl::getStaticStringHash24(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[25])
	{
		return impl::getStaticStringHash25(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[26])
	{
		return impl::getStaticStringHash26(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[27])
	{
		return impl::getStaticStringHash27(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[28])
	{
		return impl::getStaticStringHash28(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[29])
	{
		return impl::getStaticStringHash29(str);
	}
	DunForceInline unsigned int getStaticStringHash(const char (&str)[30])
	{
		return impl::getStaticStringHash30(str);
	}

	unsigned int getDynamicHash(const char* str);
}